#ifndef CAMERA_HPP
#define CAMERA_HPP

//------------------------------------------------------------------------------
// Fichier d'ent�te utilis�s
//------------------------------------------------------------------------------
namespace Viewer
{
	
	class Camera
	{
	public:
	
		//----------------------------------------------------------------------
		// Constructeur
		//----------------------------------------------------------------------
		Camera();
	
		//----------------------------------------------------------------------
		// Destructeur
		//----------------------------------------------------------------------
		~Camera();
	
		//----------------------------------------------------------------------
		// Permet d'afficher sur la sortie standard les informations concernant
		// la position, la direction et l'orientation de la camera
		//----------------------------------------------------------------------
		void Print( );
	
		//----------------------------------------------------------------------
		// Deplace la camera verticalement
		//
		// distance : distance de deplacement
		//----------------------------------------------------------------------
		void MoveVertical( float distance );
	
		//----------------------------------------------------------------------
		// Deplace la camera horizontalement
		//
		// distance : distance de deplacement
		//----------------------------------------------------------------------
		void MoveHorizontaly( float distance );
	
		//----------------------------------------------------------------------
		// Deplace la camera en profondeur
		//
		// distance : distance de deplacement
		//----------------------------------------------------------------------
		void MoveDeeply( float distance );
	
		//----------------------------------------------------------------------
		// Tourne la camera sur elle meme selon l'axe et l'angle donne
		//
		// axis : axe de rotation
		// angle : angle de rotation
		//----------------------------------------------------------------------
		void RotateCameraAxis( float* axis, float angle );
	
		//----------------------------------------------------------------------
		// Tourne la camera sur elle meme selon l'axe up et selon l'axe right
		//
		// angleX : angle de rotation selon l'axe right
		// angleY : angle de rotation selon l'axe Up
		//----------------------------------------------------------------------
		void RotateCamera( float angleX, float angleY );
	
		//----------------------------------------------------------------------
		//
		//----------------------------------------------------------------------
		float Position[4];  // Point
		float Direction[4]; // Vecteur
		float Up[4];        // Vecteur
	
		// Champs de visualisation de la camera (divise par deux)
		float FieldOfView;  // Angle
	
	private:
		Camera( Camera& copy );
		Camera& operator=( Camera& copy );
	};
}

#endif //CAMERA_HPP
